# -*- coding=utf-8 -*-
# @time:2021/8/9
# @phone:15874198829
# @author:码尚教育_星瑶
import time

from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

"""
H5元素的定位
WebView  展示html页面 Android系统提供系统控件实现网页展示
WebView里面可以嵌套多个WebView
h5页面上元素如何定位？
WebView设置为调试状态   直接开发去设置
检测WebView检测设置为调试状态   谷歌的调试地址  
当app页面检索到WebView，打印出所有的环境的值
driver.contexts

切换环境：driver.switch_context("WebView的名称？")
如何查看h5元素的属性及标签（定位h5元素的工具）
1、chrome://inspect/#devices  科学上网
2、uc-devtools
3、page_source   # 获取webview网页的脚本  driver.page_source

"""
desired_caps = {
    "automationName": "UiAutomator2",  # 默认框架
    "platformName": "Android",  # 指定操作系统
    "platformVersion": "5.1.1",  # 指定系统版本
    "deviceName": "127.0.0.1:62001",  # 指定设备名称
    "appPackage": "com.wondershare.drfone",  # 被操作的应用程序包名
    "appActivity": "com.wondershare.drfone.ui.activity.Main2Activity",  # 启动页面
    "noReset": True,  # 为true 不重置  为false 重置
    # "chromedriverExecutable":"chromedriver.exe所在的路径"
}
# 发送指令给appium server
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

# 	text=Backup
loc_backup = (MobileBy.ID, "com.wondershare.drfone:id/btnBackup")
WebDriverWait(driver, 15).until(EC.presence_of_element_located(loc_backup))
driver.find_element(*loc_backup).click()
print("点击backup")

# 点击next
time.sleep(8)

# text=	Next
loc_Next = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("Next")')
WebDriverWait(driver, 15).until(EC.presence_of_element_located(loc_Next))
driver.find_element(*loc_Next).click()
print("点击next")

# 定位原生的app元素
# 原生app切换到webview
print("contexts:", driver.contexts)
# ['NATIVE_APP', 'WEBVIEW_com.wondershare.drfone']
# NATIVE_APP:原生app控件黄精

# 切换h5环境
driver.switch_to.context("WEBVIEW_com.wondershare.drfone")

# 实现元素定位
print("切换WebView环境")
loc_email = (MobileBy.ID, 'email')
WebDriverWait(driver, 5, 0.01).until(EC.presence_of_element_located(loc_email))
driver.find_element(*loc_email).send_keys("123445@qq.com")
time.sleep(1)

# 从h5元素切换到app原生控件  需要切换环境NATIVE_APP
driver.switch_to.context("NATIVE_APP")
print("切换原生控件元素环境")
